package org.uc3m.ed.configuracion;


import java.io.BufferedWriter;
import java.io.File;
import java.io.FileFilter;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;

import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;



public class Creador_Pruebas {
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
			Creador_Pruebas configuracion = new Creador_Pruebas();
			configuracion.buscarCodigoAlumno();
			configuracion.ejecutarBat();
		
	}


	/**
	 * 
	 */
	private void buscarCodigoAlumno() {
		
		JFrame frame=null;
		JFileChooser selectorDeFichero;
		File localizacionActual;
		int seleccion;
		String texto1FicheroBat;
		String texto2FicheroBat;
		String textoFinalBat;
		BufferedWriter escribirBat;
		
		try
		{
			selectorDeFichero = new JFileChooser();
			frame = new JFrame(); 
			seleccion=0;
			texto1FicheroBat="@ECHO OFF\n"+
			"@rem Comando para ejecutar la aplicacion\n"+
			"start javaw -cp \"";
			
			localizacionActual=new File("."+File.separatorChar+"DEI_ED");
			
			if (localizacionCorrecta(localizacionActual))
			{
				texto2FicheroBat="\";\""+localizacionActual.getAbsolutePath()+File.separatorChar+"DEI_ED.jar\" org.uc3m.ed.main.Exe";
				selectorDeFichero.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
				selectorDeFichero.setDialogTitle("Carpeta principal del c�digo");
				seleccion=selectorDeFichero.showOpenDialog(frame);
				
				if(JFileChooser.APPROVE_OPTION==seleccion)
				{
					if (comprobarPathSeleccionado(selectorDeFichero.getSelectedFile()))
					{
						textoFinalBat=texto1FicheroBat+selectorDeFichero.getSelectedFile()+File.separatorChar+"Classes"+texto2FicheroBat;
						escribirBat= new BufferedWriter(new OutputStreamWriter(new FileOutputStream("Prueba_ED.bat")));
						escribirBat.write(textoFinalBat);
						escribirBat.close();
					}
					else
						JOptionPane.showMessageDialog(frame, "La carpeta elegida no contiene el directorio classes","CLASS::CLASSLOADER::Configuracion ERROR::4",JOptionPane.ERROR_MESSAGE);
				}
			}
			else 
				JOptionPane.showMessageDialog(frame, "Prueba_ED.jar no se encuentra dentro de la carpeta con la aplicaci�n del programa \n"+localizacionActual.getAbsolutePath(),"CLASS::CLASSLOADER::Configuracion ERROR::1",JOptionPane.ERROR_MESSAGE);
			
		}catch(Exception e){
			JOptionPane.showMessageDialog(frame, "Se ha produciodo una Excepcion: "+e.toString(),"CLASS::CLASSLOADER::Configuracion ERROR::2",JOptionPane.ERROR_MESSAGE);
			System.exit(0);
		}catch(Error e){
			JOptionPane.showMessageDialog(frame, " Se ha produciodo un Error: "+e.toString(),"CLASS::CLASSLOADER::Configuracion ERROR::3",JOptionPane.ERROR_MESSAGE);
			System.exit(0);
			
		}
		
		
	}


	private boolean comprobarPathSeleccionado(File selectedFile) {
		boolean encontrado= false;
		File[] filesJar = selectedFile.listFiles(         
		            new FileFilter() {                
		                public boolean accept(File fileToBeFiltered) {                    
		                    return fileToBeFiltered.getName().endsWith("classes");
		                }
		            }
		        );
		 
		if (filesJar==null||filesJar.length==0)
			return encontrado;
		return !encontrado;
	}


	private boolean localizacionCorrecta(File localizacionActual) {
		
		boolean encontrado= false;
		File[] filesJar = localizacionActual.listFiles(         
		            new FileFilter() {                
		                public boolean accept(File fileToBeFiltered) {                    
		                    return fileToBeFiltered.getName().endsWith("DEI_ED.jar");
		                }
		            }
		        );
		 
		if (filesJar==null)
			return encontrado;
		return !encontrado;
	}
	
	public void ejecutarBat(){
		JFrame frame=null;
		try{
			
			Runtime aplicacion = Runtime.getRuntime(); 
			frame = new JFrame();
			aplicacion.exec("cmd.exe /K Prueba_ED.bat");
			
		}catch(Exception e){
			JOptionPane.showMessageDialog(frame, "Se ha produciodo una Excepcion: "+e.toString(),"CLASS::CLASSLOADER::Configuracion ERROR::4",JOptionPane.ERROR_MESSAGE);
			System.exit(0);
		}catch(Error e){
			JOptionPane.showMessageDialog(frame, " Se ha produciodo un Error: "+e.toString(),"CLASS::CLASSLOADER::Configuracion ERROR::5",JOptionPane.ERROR_MESSAGE);
			System.exit(0);
			
		}

	}
}
